package pers.xukai.common.utils;

import cn.hutool.core.util.ObjectUtil;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import pers.xukai.common.exception.BizException;

import java.util.Map;

/**
 * 断言
 *
 * @author 殷绪凯
 * @since  2022年 11月 29日 21:34
 */
@Data
public class Assert {

    /**
     * 空值断言
     *
     * @param obj     对象
     * @param objName 对象名称
     * @return 断言对象
     */
    public static Assert isNotNull(Object obj, String objName) {
        boolean flag = false;
        if (obj instanceof String) {
            flag = StringUtils.isEmpty((String) obj);
        }
        if (flag || ObjectUtil.isNull(obj)) {
            throw new BizException(String.format("【%s】不能为空！", objName));
        }
        return new Assert();
    }

    /**
     * 空值断言
     *
     * @param map 对象：对象名 map
     */
    public static void isNotNull(Map<Object, String> map) {
        map.forEach(Assert::isNotNull);
    }

    /**
     * 链式调用空值断言
     *
     * @param obj     对象
     * @param objName 对象名
     * @return 断言对象
     */
    public Assert and(Object obj, String objName) {
        return Assert.isNotNull(obj, objName);
    }

    /**
     * 值不为真时抛出异常
     * @param b boolean值
     * @param msg 异常信息
     */
    public static void falseThrow(boolean b,String msg){
        if (!b) throw new BizException(msg);
    }
}
